import axios from 'axios';
import router from '@/router';
import { ElMessage } from 'element-plus';
import { APP_CODE } from '@/plugins/global';

// ---- 创建Axios实例，该实例将被全局注册以实现HTTP请求。
const instance = axios.create({
    // ---- URL前缀。
    baseURL: '/loc',
    // ---- 超时时间。
    timeout: 10000,
    // ---- 头信息。
    headers: { 'Content-Type': 'application/json' }
});

// ---- 请求拦截器：用于在正式发送请求前执行自定义逻辑。
instance.interceptors.request.use(config => {
    // ---- 向请求头中添加应用代码/平台代码。
    config.headers.appCode = APP_CODE;
    config.headers.platformCode = "html";
    // ---- 向请求头中添加令牌（如果存在）。
    const token = localStorage.getItem('token');
    if (token) {
        config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
}, error => {
    return Promise.reject(error);
});



// ---- 响应拦截器：用于在正式返回请求结果前执行自定义逻辑。
instance.interceptors.response.use(response => {
    const code = response.data.code;
    if (code == '001010') {
        // ---- 未携带令牌，跳转至登录页。
        ElMessage.error('未登录！');
        router.push('/');
        return Promise.reject(null);
    } else if (response.data.code == '001012') {
        // ---- 登录已过期，删除员工信息并跳转至登录页。
        localStorage.removeItem('token');
        localStorage.removeItem('info');
        ElMessage.error('登录已过期！');
        router.push('/');
        return Promise.reject(null);
    } else {
        // ---- 对于其它正常/异常情况直接返回，以便在业务层进行专项处理。
        return response;
    }
}, error => {
    ElMessage.error('网络繁忙，请重试......');
    return Promise.reject(error);
});

export default instance;